3.9 Обработка событий

Обработка, описанная в данной главе, является лишь примером одной из возможных реализаций протокола. Иные реализации могут иметь несколько иные процедуры обработки, однако они должны отличаться от описанных в данной главе лишь в деталях, но никак не по существу.

Деятельность программы протокола TCP можно рассматривать как реагирование на события. Эти происходящие события можно разбивать на три категории: запросы клиентов, прибытие сегментов, истечение контрольного времени. Данная глава описывает деятельность в протоколе TCP в ответ на каждое их этих событий. Во многих случаях необходимая обработка зависит от состояния соединения. События, которые могут произойти:

   Команды клиента
   - на открытие соединения
   - на посылку данных
   - на получение данных
   - на закрытие соединения
   - на ликвидацию соединения
   - на определение статуса соединения
   Получения сегментов
   Истечение контрольного времени
   - для действий клиента
   - для повторной посылки
   - в состоянии ожидания

Модель интерфейса TCP и клиента состоит в том, что команды клиента выполняются немедленно, а вероятный отложенный отчет предоставляется через механизм событий или псевдопрерываний. В дальнейшем описании понятие "сигнал" может обозначать некое основание для посылки отложенного отчета.

Сообщение об ошибках пердоставляется в виде текстовых строк. Например, команды клиента, адресованные к несуществующим соединениям, получат сообщение "error: connection not open".

Пожалуйста учтите, что в дальнейшем вся арифметика для номеров очереди, номеров подтверждения, окон и т.д. осуществляется по модулю 2**32, что соответствует размеру множества номеров очередей. Заметим также, что "=<" означает "меньше или равно" (по модулю 2**32).

Чтобы постичь смысл обработки приходящих сегментов, естественным было бы представить, что они сперва проверяются на корректность номера очереди (т.е. что их информация попадает в диапазон "окна получения" среди ожидаемых номеров очереди) и что они, в общем случае, будут ставиться в очередь и подвергаться обработке соответственно своим номерам.

Если одни сегменты перекрываются с другими, ранее полученными сегментами, то мы конструируем сегмент, содержащий лишь действительно новые данные, а затем соответствующим образом корректируем поля заголовка.

Заметим, что состояние программы протокола TCP остается при обработке событий без изменений, если обратное не указано особо.

Hosted by uCoz